开始之前:

1. 识别人脸输出数据

在人脸识别功能下,当人脸出现在HUSKYLENS 2 屏幕中时,可以被检测和框出,我们可以获取HUSKYLENS 2 画面中离十字光标最近的人脸的相关数据并在串口打印出来,可以读取的人脸数据有:人脸ID、人脸名称、宽度、高度以及人脸中心点的X坐标位置和Y坐标位置。

I2C模式 示例程序如下。

#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2 huskylens;


// 主程序开始
void setup() {
	Serial.begin(9600);
	Wire.begin();
  while (!huskylens.begin(Wire)) {
    delay(100);
  }
	huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
	huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
	if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
		Serial.println((String("人脸的ID") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)))));
		Serial.println((String("人脸名称") + String((RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, name)))));
		Serial.println((String("人脸中心点坐标") + String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))));
		Serial.println((String("人脸宽") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width)))));
		Serial.println((String("人脸高") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)))));
		delay(500);
	}
}

UART模式 示例程序如下。后续示例代码将仅提供I2C模式代码,如需使用UART模式,请仿照setup()中初始化的方式修改代码即可。

#include "SoftwareSerial.h"
#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2 huskylens;
SoftwareSerial Serial1(2, 3);



// 主程序开始
void setup() {
	delay(1000);
	Serial1.begin(9600);
    while (!huskylens.begin(Serial1)) {
        delay(100);
    }
	huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
	huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
	if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
		Serial.println((String("人脸的ID") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)))));
		Serial.println((String("人脸名称") + String((RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, name)))));
		Serial.println((String("人脸中心点坐标") + String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))));
		Serial.println((String("人脸宽") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width)))));
		Serial.println((String("人脸高") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)))));
		delay(500);
	}
}

** 运行结果:**程序上传成功后,HUSKYLENS 2自动切换到人脸识别的功能下如下,对于未学习过的人脸默认输出ID为0。

Interface Diagram

可以对准一张学习过的人脸,,对于已学习过的人脸输出ID与HUSKYLENS 2 屏幕显示的ID保持一致。

Interface Diagram

如何学习人脸详细操作请看:人脸识别功能说明

2. 统计人脸数量输出指定数据

当画面中出现多张人脸时,可以使用以下示例程序统计画面中的人脸数量,获取指定ID的人脸相关数据。

示例程序如下

#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2 huskylens;


// 主程序开始
void setup() {
	Serial.begin(9600);
	Wire.begin();
  while (!huskylens.begin(Wire)) {
    delay(100);
  }
	huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
	huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
	if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
		Serial.println((String("检测到的人脸数量为:") + String((huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)))));
	}
	if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1) != NULL))) {
		Serial.println((String("ID1人脸的总数") + String((huskylens.getCachedResultNumByID(ALGORITHM_FACE_RECOGNITION, 1)))));
		Serial.println((String("ID1人脸的名称") + String((RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, name)))));
		Serial.println((String("ID1人脸的中心点坐标") + String((String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, yCenter)))))))));
		Serial.println((String("ID1人脸的宽") + String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, width)))));
		Serial.println((String("ID1人脸的高") + String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, height)))));
	}
	delay(500);
}

**运行结果:**如下图,运行程序,串口打印当前画面中的人脸数量。当ID为1的人脸出现在画面中就打印输出人脸ID1的相关数据。

Interface Diagram